package com.ushine.web.component.task.model;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ushine.web.base.model.base.BaseBO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;

/**
 * @Author: yls
 * @Date: 2021/04/28 22:44
 * @Description: 任务调度的基本信息
 * @Version 1.0
 */
@EqualsAndHashCode(callSuper = true)
@Entity
@Data
@ApiModel(description = "任务调度的基本信息")
@Table(name = "t_cp_task_info")
@org.hibernate.annotations.Table(appliesTo = "t_cp_task_info", comment = "任务调度的基本信息")
@TableName(value = "t_cp_task_info")
public class AsyncTaskInfoDO<T> extends BaseBO implements Serializable {
    /**
     * 编号
     * // 解决前台js接收雪花id精度丢失问题
     * JsonFormat(shape = JsonFormat.Shape.STRING)
     */
    @Id
    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty("编号")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    @Column(name = "id", columnDefinition = "bigint comment '编号'")
    private Long id;

    /**
     * 任务参数
     */
    @ApiModelProperty("任务参数")
    @Column(name = "task_param", columnDefinition = "text comment '任务参数'")
    private String taskParam;


    /**
     * 任务名称
     */
    @ApiModelProperty("任务名称")
    @Column(name = "task_name", columnDefinition = "varchar(255) comment '任务名称'")
    private String taskName;

    /**
     * 开始时间
     */
    @ApiModelProperty("开始时间")
    @Column(name = "start_time", columnDefinition = "datetime comment '开始时间'")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startTime;

    /**
     * 结束时间
     */
    @ApiModelProperty("结束时间")
    @Column(name = "end_time", columnDefinition = "datetime comment '结束时间'")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endTime;

    /**
     * 执行耗时
     */
    @ApiModelProperty("执行耗时")
    @Column(name = "total_time", columnDefinition = "bigint comment '执行耗时'")
    private Long totalTime;

    /**
     * 任务执行状态
     */
    @ApiModelProperty("任务执行状态")
    @Column(name = "status", columnDefinition = "tinyint comment '任务执行状态'")
    private Integer status;

    /**
     * 任务执行异常信息记录
     */
    @ApiModelProperty("任务执行异常信息记录")
    @Column(name = "err_msg", columnDefinition = "text comment '任务执行异常信息记录'")
    private String errMsg;

    /**
     * 如果任务运行中途，突然系统故障关闭，系统启动后是否需要恢复
     */
    @ApiModelProperty("如果任务运行中途，突然系统故障关闭，系统启动后是否需要恢复")
    @Column(name = "need_restore", columnDefinition = "tinyint comment '如果任务运行中途，突然系统故障关闭，系统启动后是否需要恢复'")
    private Boolean needRestore;

    /**
     * 任务参数
     */
    @Transient
    @TableField(exist = false)
    @ApiModelProperty("任务参数")
    private T param;
}
